package cn.kjcoder.redis.controller;

import cn.kjcoder.redis.config.Constants;
import cn.kjcoder.redis.domain.Product;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collections;
import java.util.List;

/**
 * @author hkj
 * @email 1349091387@qq.com
 * @date 2022/1/20
 * 源码允许修改，并且本人十分乐意有 大佬 来对代码进行 随 意 调 教
 **/
@RestController
@Slf4j
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 分页查询：在高并发的情况下，只能走redis查询，走db的话必定会把db打垮
     */
    @GetMapping("/find")
    public List<Product> find(int currentPage,int pageSize){
        int start = (currentPage - 1) * pageSize;
        int end = (start + pageSize) - 1;
        List<Product> list = null;
        //使用lrange命令实现分页查询
        try {
            list = this.redisTemplate.opsForList().range(Constants.JHS_KEY, start, end);
            if(CollectionUtils.isEmpty(list)){
                //TODO 去DB查询
            }
            log.info("查询结果：{}", list);
        } catch (Exception e) {
            //这里的异常，一般是redis瘫痪 ，或 redis网络timeout
            log.error("exception:", e);
            //TODO 去DB查询
        }
        return list;
    }

}
